[Talend] Log4j によるロギング
バッチ処理中のエラーログ出力は、後で原因を特定するために必要不可欠かと思います。
Talend ジョブの標準出力をファイルへリダイレクトする方法もありますが、今回は Log4J でのログ出力を考えてみました。
Logger
tJava コンポーネントプロパティの「詳細設定」で Logger クラスをインポートします。
import org.apache.log4j.Logger;
tJava コンポーネント内で Logger インスタンスを生成してログ出力します。
Logger logger = Logger.getLogger(getClass()); logger.warn("テストテスト");
上図の通りコンソールへログ出力されました。
Log4J の設定はどこにあるかというと……
(ファイルメニューから「プロジェクトプロパティの編集」を選択するかプロジェクト設定ボタンを押下します。)
プロジェクトの設定にあります。
tLogCatcher
次は tLogCatcher コンポーネントを使って例外をロギングしてみます。
tJava コンポーネントで例外を起こします。
double value = 1 / 0;
tLogCatcher を設置したら tLogRow と メインフローで繋いで例外データがどのような形で流れてくるか確認します。
java.lang.ArithmeticException は下表のようなデータとして流れてくる事がわかりました。
key | value |
---|---|
moment | 2015-08-31 15:47:42 |
pid | 7GWW1i |
root_pid | 7GWW1i |
father_pid | 7GWW1i |
project | EXAMPLE |
job | loggng |
context | Default |
priority | 6 |
type | Java Exception |
origin | tJava_1 |
message | java.lang.ArithmeticException:/ by zero |
code | 1 |
今度は tJavaRow コンポーネントで tLogCatcher からのフローを受けてロギングします。
tJavaRow も前段の tJava と同様に Logger をインポートします。
import org.apache.log4j.Logger;
Logger インスタンスを生成してロギングします。ロギングするメッセージには、tLogCathcer から流れてきた message カラムの値を指定します。
Logger logger = Logger.getLogger(getClass()); logger.error(input_row.message);
tLogRow を無効にして実行します。
エラーメッセージがロギングされました。
まとめ
いくつかのコンポーネントは、コンポーネント単位でロギングするようになっているようですが、ジョブとしてのロギングは tJava や tJavaRow を用いてロギングする方策しかないかなと感じました。
今回は ConsoleAppender によるコンソールへの出力だけでしたが、次回は RolingFileAppender を適用してログローテーションさせてみたいと思います。